package com.songlanyun.modules.servicegoods.controller.admin;

import java.util.Arrays;
import java.util.Map;

//import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.songlanyun.common.annotation.RepeatSubmit;
import com.songlanyun.common.annotation.SysLog;
import com.songlanyun.modules.goods.model.dto.GoodsStatusDTO;
import com.songlanyun.modules.servicegoods.model.dto.ServiceGoodsDTO;
import com.songlanyun.modules.user.controller.AbstractController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import com.songlanyun.modules.servicegoods.entity.ServiceGoods;
import com.songlanyun.modules.servicegoods.service.ServiceGoodsService;
import com.songlanyun.common.utils.PageUtils;
import com.songlanyun.common.utils.R;


/**
 * 服务商品
 *
 * @author lubo
 * @email sunlightcs@gmail.com
 * @date 2020-12-15 11:33:21
 */
@RestController
@RequestMapping("admin/servicegoods")
public class ServiceGoodsAdminController extends AbstractController {
    @Autowired
    private ServiceGoodsService serviceGoodsService;

    /**
     * 商家创建服务商品
     */
    @SysLog("商家创建服务商品")
    @PostMapping("/create")
    //@RequiresPermissions("servicegoods:servicegoods:save")
    public R save(@RequestBody ServiceGoodsDTO dto) {
        ServiceGoods goods = serviceGoodsService.add(getShopId(true), dto);
        return R.ok().put("data", goods);
    }


    /**
     * 商家修改服务商品
     */
    @SysLog("商家修改服务商品")
    @PutMapping("/update")
    //@RequiresPermissions("servicegoods:servicegoods:update")
    public R update(@RequestBody ServiceGoodsDTO dto) {
        ServiceGoods goods = serviceGoodsService.update(getShopId(true), dto);
        return R.ok().put("data", goods);
    }

    /**
     * 商家以服务商品id查看商品
     */
    @GetMapping("/info/{id}")
    //@RequiresPermissions("servicegoods:servicegoods:info")
    public R info(@PathVariable("id") Long id) {
        ServiceGoods serviceGoods = serviceGoodsService.loadServiceGoodsByShopIdAndId(getShopId(true),id,false);
        serviceGoods.loadCategory();
        serviceGoods.loadGroupList();
        serviceGoods.loadContent();
        serviceGoods.loadServiceItems();
        return R.ok().put("data", serviceGoods);
    }

    /**
     * 平台以服务商品id查看商品
     */
    @GetMapping("/get/{id}")
    //@RequiresPermissions("servicegoods:servicegoods:info")
    public R getById(@PathVariable("id") Long id) {
        ServiceGoods serviceGoods = serviceGoodsService.loadServiceGoodsById(id,false);
        serviceGoods.loadCategory();
        serviceGoods.loadGroupList();
        serviceGoods.loadContent();
        serviceGoods.loadServiceItems();
        return R.ok().put("data", serviceGoods);
    }


    /**
     * 删除
     */
    @SysLog("商家删除服务商品")
    @DeleteMapping("/delete/{id}")
    //@RequiresPermissions("goods:productgoods:delete")
    public R delete(@PathVariable("id") Long id){
        serviceGoodsService.delete(getShopId(),id);
        return R.ok();
    }



    /**
     * 商家上架下架商品
     */
    @SysLog("商家上架下架服务商品")
    @RepeatSubmit(value = "3")
    @PutMapping("/added")
    //@RequiresPermissions("shop:goods:added")
    public R added(@RequestBody GoodsStatusDTO dto){
        serviceGoodsService.added(getShopId(true),dto);
        return R.ok();
    }

    /**
     * 商家设置服务商品是否是热门
     */
    @SysLog("商家设置服务商品是否是热门")
    @RepeatSubmit(value = "3")
    @PutMapping("/hot")
    //@RequiresPermissions("shop:goods:added")
    public R hot(@RequestBody GoodsStatusDTO dto){
        serviceGoodsService.hot(getShopId(true),dto);
        return R.ok();
    }

    /**
     * 商家设置服务商品是否是新品
     */
    @SysLog("商家设置服务商品是否是新品")
    @RepeatSubmit(value = "3")
    @PutMapping("/new")
    //@RequiresPermissions("shop:goods:added")
    public R newGoods(@RequestBody GoodsStatusDTO dto){
        serviceGoodsService.newGoods(getShopId(true),dto);
        return R.ok();
    }

    /**
     * 商家设置服务商品是否是推荐
     */
    @SysLog("商家设置服务商品是否是推荐")
    @RepeatSubmit(value = "3")
    @PutMapping("/recommend")
    //@RequiresPermissions("shop:goods:added")
    public R recommend(@RequestBody GoodsStatusDTO dto){
        serviceGoodsService.recommend(getShopId(true),dto);
        return R.ok();
    }

    /**
     * 平台管理员审核服务商品
     */
    @SysLog("平台管理员审核服务商品")
    @RepeatSubmit(value = "3")
    @PutMapping("/check")
    //@RequiresPermissions("shop:goods:check")
    public R check(@RequestBody GoodsStatusDTO dto){
        serviceGoodsService.check(dto.getGoodsId(),dto);
        return R.ok();
    }

    /**
     * 平台查询所有服务商品（为了审核）
     *  * params参数说明
     *      * shop_id 商家店铺id可以不给不给查所有
     *      * shop_name 商家店铺名乐可以不给不给查所有
     *      * verify_status 审核状态 可以不给查全部 有效值：（0待审，1通过，2不通过）
     *      * title 标题（可以不给，用来模糊查询）
     *      * page 当前第几页（默认第一页）
     *      * limit 每页多少条 （默认每页10条）
     */
    @RequestMapping("/all/pages")
    //@RequiresPermissions("goods:all:list")
    public R allGoodsList(@RequestParam Map<String, Object> params){
        PageUtils page = serviceGoodsService.queryALLPage(params);
        return R.ok().put("page", page);
    }

    /**
     * 商家查询所有服务商品
     *  * params参数说明
     *      * shop_id 商家店铺id可以不给不给查所有
     *      * verify_status 审核状态 可以不给查全部 有效值：（0待审，1通过，2不通过）
     *      * group_id 商家分组
     *      * added 上下架
     *      * title 标题（可以不给，用来模糊查询）
     *      * page 当前第几页（默认第一页）
     *      * limit 每页多少条 （默认每页10条）
     */
    @RequestMapping("/self/pages")
    //@RequiresPermissions("goods:all:list")
    public R selfGoodsList(@RequestParam Map<String, Object> params){
        params.put("shop_id",getShopId(true));
        PageUtils page = serviceGoodsService.querySelfPage(params);
        return R.ok().put("page", page);
    }


}
